博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网上图书商城项目学习笔记-007登录功能实现
阅读量:4502 次
发布时间:2019-06-08

本文共 9043 字,大约阅读时间需要 30 分钟。

一、功能流程分析

二、代码

1.view层

1)login.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3  4  5  6  7    8      9     登录10     11     
12
13
14
15
16
17
20
21 22 23 24 30 31 32 33
34
35
36
37
38
39
40
会员登录41
42 43 44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
76
77
78
79
80
81
82
83
86
87
用户名
 
密 码
 
验证码 72 73 74 换张图75
 
  84 85
88
89
90
91
92
93
94 95 96

 

2)login.js

1 $(function() {  2     /*  3      * 1. 让登录按钮在得到和失去焦点时切换图片  4      */  5     $("#submit").hover(  6         function() {  7             $("#submit").attr("src", "/goods/images/login2.jpg");  8         },  9         function() { 10             $("#submit").attr("src", "/goods/images/login1.jpg"); 11         } 12     ); 13      14     /* 15      * 2. 给注册按钮添加submit()事件,完成表单校验 16      */ 17     $("#loginForm").submit(function(){ 18         $("#msg").text(""); 19         var bool = true; 20         $(".input").each(function() { 21             var inputName = $(this).attr("name"); 22             if(!invokeValidateFunction(inputName)) { 23                 bool = false; 24             } 25         }); 26         return bool; 27     }); 28      29     /* 30      * 3. 输入框得到焦点时隐藏错误信息 31      */ 32     $(".input").focus(function() { 33         var inputName = $(this).attr("name"); 34         $("#" + inputName + "Error").css("display", "none"); 35     }); 36      37     /* 38      * 4. 输入框推动焦点时进行校验 39      */ 40     $(".input").blur(function() { 41         var inputName = $(this).attr("name"); 42         invokeValidateFunction(inputName); 43     }) 44 }); 45  46 /* 47  * 输入input名称,调用对应的validate方法。 48  * 例如input名称为:loginname,那么调用validateLoginname()方法。 49  */ 50 function invokeValidateFunction(inputName) { 51     inputName = inputName.substring(0, 1).toUpperCase() + inputName.substring(1); 52     var functionName = "validate" + inputName; 53     return eval(functionName + "()");     54 } 55  56 /* 57  * 校验登录名 58  */ 59 function validateLoginname() { 60     var bool = true; 61     $("#loginnameError").css("display", "none"); 62     var value = $("#loginname").val(); 63     if(!value) {
// 非空校验 64 $("#loginnameError").css("display", ""); 65 $("#loginnameError").text("用户名不能为空!"); 66 bool = false; 67 } else if(value.length < 3 || value.length > 20) {
//长度校验 68 $("#loginnameError").css("display", ""); 69 $("#loginnameError").text("用户名长度必须在3 ~ 20之间!"); 70 bool = false; 71 } 72 return bool; 73 } 74 75 /* 76 * 校验密码 77 */ 78 function validateLoginpass() { 79 var bool = true; 80 $("#loginpassError").css("display", "none"); 81 var value = $("#loginpass").val(); 82 if(!value) {
// 非空校验 83 $("#loginpassError").css("display", ""); 84 $("#loginpassError").text("密码不能为空!"); 85 bool = false; 86 } else if(value.length < 3 || value.length > 20) {
//长度校验 87 $("#loginpassError").css("display", ""); 88 $("#loginpassError").text("密码长度必须在3 ~ 20之间!"); 89 bool = false; 90 } 91 return bool; 92 } 93 94 /* 95 * 校验验证码 96 */ 97 function validateVerifyCode() { 98 var bool = true; 99 $("#verifyCodeError").css("display", "none");100 var value = $("#verifyCode").val();101 if(!value) {
//非空校验102 $("#verifyCodeError").css("display", "");103 $("#verifyCodeError").text("验证码不能为空!");104 bool = false;105 } else if(value.length != 4) {
//长度不为4就是错误的106 $("#verifyCodeError").css("display", "");107 $("#verifyCodeError").text("错误的验证码!");108 bool = false;109 } else {
//验证码是否正确110 $.ajax({111 cache: false,112 async: false,113 type: "POST",114 dataType: "json",115 data: {method: "validateVerifyCode", verifyCode: value},116 url: "/goods/UserServlet",117 success: function(flag) {118 if(!flag) {119 $("#verifyCodeError").css("display", "");120 $("#verifyCodeError").text("错误的验证码!");121 bool = false; 122 }123 }124 });125 }126 return bool;127 }

 

2.servlet层

1)UserServlet.java

1 public String login(HttpServletRequest request, HttpServletResponse response) throws IOException { 2         /* 3          * 1. 封装表单数据到User 4          * 2. 校验表单数据 5          * 3. 使用service查询,得到User 6          * 4. 查看用户是否存在,如果不存在: 7          *   * 保存错误信息:用户名或密码错误 8          *   * 保存用户数据:为了回显 9          *   * 转发到login.jsp10          * 5. 如果存在,查看状态,如果状态为false:11          *   * 保存错误信息:您没有激活12          *   * 保存表单数据:为了回显13          *   * 转发到login.jsp14          * 6. 登录成功:15          *   * 保存当前查询出的user到session中16          *   * 保存当前用户的名称到cookie中,注意中文需要编码处理。17          */18         19         // 1. 封装表单数据到user20         User formUser = CommonUtils.toBean(request.getParameterMap(), User.class);21         22         // 2. 校验23         Map
errors = validateLogin(formUser, request.getSession());24 if(errors.size() > 0) {25 request.setAttribute("errors", errors);26 request.setAttribute("user", formUser);27 return "f:/jsps/user/login.jsp";28 }29 30 // 3. 调用userService#login()方法31 User user = userService.login(formUser);32 33 // 4. 开始判断34 if(user == null) {35 request.setAttribute("msg", "用户名或密码错误!");36 request.setAttribute("user", formUser);37 return "f:/jsps/user/login.jsp";38 }39 if(!user.isStatus()) {40 request.setAttribute("msg", "您还没有激活!");41 request.setAttribute("user", formUser);42 return "f:/jsps/user/login.jsp"; 43 }44 // 保存用户到session45 request.getSession().setAttribute("sessionUser", user);46 // 获取用户名保存到cookie中47 String loginname = URLEncoder.encode(user.getLoginname(), "utf-8");48 Cookie cookie = new Cookie("loginname", loginname);49 cookie.setMaxAge(24 * 60 * 60 * 10);//保存10天50 response.addCookie(cookie);51 return "r:/index.jsp";52 }53 54 /**55 * 登录校验方法,内容待完成56 * @param formUser57 * @param session58 * @return59 */60 private Map
validateLogin(User formUser, HttpSession session) {61 Map
errors = new HashMap
();62 // 1. 校验登录名63 String loginname = formUser.getLoginname();64 if(loginname == null || loginname.trim().isEmpty()) {65 errors.put("loginname", "用户名不能为空!");66 } else if(loginname.length() < 3 || loginname.length() > 20) {67 errors.put("loginname", "用户名长度必须在3~20之间!");68 } 69 70 // 2. 校验登录密码71 String loginpass = formUser.getLoginpass();72 if(loginpass == null || loginpass.trim().isEmpty()) 73 errors.put("loginpass", "密码不能为空!");74 else if(loginpass.length() < 3 || loginpass.length() > 20)75 errors.put("loginpass", "密码长度必须在3~20之间!");76 77 // 3. 验证码校验78 String verifyCode = formUser.getVerifyCode();79 String vCode = (String) session.getAttribute("vCode");80 if(verifyCode == null || verifyCode.trim().isEmpty()) {81 errors.put("verifyCode", "验证码不能为空!");82 } else if(!verifyCode.equalsIgnoreCase(vCode)) {83 errors.put("verifyCode", "验证码错误!");84 }85 86 return errors;87 }

 

3.service层

1)userService.java

1     /** 2      * 登录功能 3      * @param user 4      * @return 5      */ 6     public User login(User user) { 7         try { 8             return userDao.findByLoginnameAndLoginpass(user.getLoginname(), user.getLoginpass()); 9         } catch (SQLException e) {10             throw new RuntimeException(e);11         }12     }

 

4.dao层

1)UserDao.java

1     /** 2      * 按用户名和密码查询 3      * @param loginname 4      * @param loginpass 5      * @return 6      * @throws SQLException 7      */ 8     public User findByLoginnameAndLoginpass(String loginname, String loginpass) throws SQLException { 9         String sql = "select * from t_user where loginname=? and loginpass=?";10         return qr.query(sql, new BeanHandler
(User.class), loginname, loginpass);11 }

 

转载于:https://www.cnblogs.com/shamgod/p/5159750.html

你可能感兴趣的文章
Ecstore Nginx Rewrite(去掉链接中的index.php) ECSTORE 伪静态
查看>>
BZOJ 1876: [SDOI2009]SuperGCD
查看>>
swift初学日志
查看>>
CCF真题之出现次数最多的数
查看>>
Eclipse上GIT插件_客户端配置
查看>>
使用HANA Web-based Development Workbench创建最简单的Server Side JavaScript
查看>>
JavaScript浏览器对象之二Document对象
查看>>
算法导论 第二部分——排序和顺序统计量
查看>>
监督学习——AdaBoost元算法提高分类性能
查看>>
SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (三)...
查看>>
[原创]在Linux系统Ubuntu14.04上安装部署docker。
查看>>
网络对抗技术 实验四
查看>>
关联Anaconda和最新Pycharm2018.3.2
查看>>
DataGridView列的宽度、行的高度自动调整
查看>>
内部网关协议 (IGP)
查看>>
概要文档知识补遗
查看>>
在Linux上创建webrev[基于git]
查看>>
mybatis缓存
查看>>
幂等性的实现方案
查看>>
JVM系列-分代收集垃圾回收
查看>>